//package com.yunxin.admin.system.api.warn;
//
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.date.DatePattern;
//import cn.hutool.core.date.DateTime;
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.util.StrUtil;
//import com.baomidou.dynamic.datasource.annotation.DS;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//import com.yunxin.admin.system.application.dto.MsgInfoPageDTO;
//import com.yunxin.core.domain.external.warn.WarnUserAddOrUpdateDTO;
//import com.yunxin.core.domain.external.warn.WarnUserPageDTO;
//import com.yunxin.core.domain.external.warn.WarnUserPageResultDTO;
//import com.yunxin.admin.system.infra.framework.security.util.SecurityUtils;
//import com.yunxin.common.utils.JacksonUtils;
//import com.yunxin.core.domain.external.warn.WarnInfoChannelDTO;
//import com.yunxin.core.domain.external.warn.WarnInfoMerchantDTO;
//import com.yunxin.core.domain.model.warn.WarnHistory;
//import com.yunxin.core.domain.model.warn.WarnUser;
//import com.yunxin.core.domain.model.warn.WarnUserType;
//import com.yunxin.core.domain.service.warn.IWarnHistoryService;
//import com.yunxin.core.domain.service.warn.IWarnUserService;
//import com.yunxin.core.domain.service.warn.IWarnUserTypeService;
//import io.swagger.v3.oas.annotations.Operation;
//import io.swagger.v3.oas.annotations.tags.Tag;
//import jakarta.validation.Valid;
//import jakarta.validation.constraints.Max;
//import jakarta.validation.constraints.Min;
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.transaction.annotation.Transactional;
//import org.springframework.web.bind.annotation.*;
//import com.yunxin.common.result.Result;
//
//import java.util.*;
//import java.util.stream.Collectors;
//
//
//@Tag(name = "56.警告通知")
//@RestController
//@RequestMapping("/api/v1/warn")
//@RequiredArgsConstructor
//@Slf4j
//public class WarnController {
//
//
//    private final IWarnUserService warnUserService;
//
//    private final IWarnHistoryService warnHistoryService;
//
//    private final IWarnUserTypeService warnUserTypeService;
//
//
//
//
//    @Operation(summary = "告警用户分页列表")
//    @PostMapping("/userPage")
//    public Result<Page<WarnUserPageResultDTO>> userPage(@RequestBody WarnUserPageDTO userPageDTO) {
//
//
//        Page<WarnUserPageResultDTO> pages = warnUserService.selectWarnUserPage(userPageDTO);
//
//
//        return Result.success(pages);
//    }
//
//
//    @Operation(summary = "告警用户编辑或新增")
//    @PostMapping("/userAddOrUpdate")
//    public Result userAddOrUpdate(@RequestBody WarnUserAddOrUpdateDTO userDTO) {
//
//        Long id = userDTO.getId();
//        Long userId = SecurityUtils.X.getUserId();
//
//
//
//        if (Objects.isNull(id)) {
//            if (StrUtil.isBlank(userDTO.getUname()) || StrUtil.isBlank(userDTO.getPhone())) {
//                return Result.failed("数据异常");
//            }
//            WarnUser warnUser = new WarnUser();
//            warnUser.setUname(userDTO.getUname());
//            warnUser.setPhone(userDTO.getPhone());
//            warnUser.setState(0);
//            warnUser.setCreateTime(new Date());
//            warnUser.setCreateBy(userId);
//            warnUserService.save(warnUser);
//            id = warnUser.getId();
//
//        } else {
//            warnUserService.lambdaUpdate()
//                    .eq(WarnUser::getId, id)
//                    .set(StrUtil.isNotBlank(userDTO.getUname()), WarnUser::getUname, userDTO.getUname())
//                    .set(StrUtil.isNotBlank(userDTO.getPhone()), WarnUser::getPhone, userDTO.getPhone())
////                    .set(Objects.nonNull(userDTO.getState()), WarnUser::getState, userDTO.getState())
//                    .update();
//            warnUserTypeService.lambdaUpdate()
//                    .eq(WarnUserType::getWarnUser, id)
//                    .remove();
//        }
//
//        List<Integer> types = userDTO.getTypes();
//        List<WarnUserType> warnUserTypes = new ArrayList<>();
//        if (CollUtil.isNotEmpty(types)) {
//            for (Integer type : types) {
//                WarnUserType warnUserType = new WarnUserType();
//                warnUserType.setWarnType(type);
//                warnUserType.setWarnUser(id);
//                warnUserTypes.add(warnUserType);
//            }
//            warnUserTypeService.saveBatch(warnUserTypes);
//        }
//
//        return Result.success();
//    }
//
//
//    @Operation(summary = "告警用户状态")
//    @PostMapping("/user/{userId}")
//    public Result userDel(@PathVariable Long userId, @Valid @Min(message = "状态异常",value = 0L) @Max(message = "",value = 1L)@RequestParam("state") Integer state) {
//        warnUserService.lambdaUpdate()
//                .eq(WarnUser::getId, userId)
//                .set(WarnUser::getState, state)
//                .update();
//        return Result.success();
//    }
//
//
//
//
//
//    @Operation(summary = "批量告警用户移除")
//    @PostMapping("/batchDelUser")
//    @Transactional(rollbackFor = Exception.class)
//    @DS("core")
//    public Result batchDelUser(@RequestBody List<Long> userIds) {
//
//
//        for (Long userId : userIds) {
//            warnUserService.lambdaUpdate()
//                    .eq(WarnUser::getId, userId)
//                    .set(WarnUser::getState, 0)
//                    .set(WarnUser::getDel, 1)
//                    .update();
//
//            warnUserTypeService.lambdaUpdate()
//                    .eq(WarnUserType::getWarnUser, userId)
//                    .remove();
//        }
//
//
//
//
//        return Result.success();
//    }
//
//
//
//
//    @Operation(summary = "告警用户移除")
//    @PostMapping("/userDel/{userId}")
//    public Result userDel(@PathVariable Long userId) {
//        warnUserService.lambdaUpdate()
//                .eq(WarnUser::getId, userId)
//                .set(WarnUser::getState, 0)
//                .set(WarnUser::getDel, 1)
//                .update();
//
//        warnUserTypeService.lambdaUpdate()
//                .eq(WarnUserType::getWarnUser, userId)
//                .remove();
//        return Result.success();
//    }
//
//
//    @Operation(summary = "告警用户状态")
//    @PostMapping("/userState/{userId}/{state}")
//    public Result userState(@PathVariable Long userId,@PathVariable Integer state) {
//
//        if (state > 1 || state < 0) {
//            return Result.failed("数据异常");
//        }
//
//        warnUserService.lambdaUpdate()
//                .eq(WarnUser::getId, userId)
//                .set(WarnUser::getState, state)
//                .update();
//
//        return Result.success();
//    }
//
//
//
//
//    @Operation(summary = "告警信息分页获取")
//    @PostMapping("/msgInfoPage")
//    public Result userDel(@RequestBody MsgInfoPageDTO msgInfoPageDTO) {
//        if (!SecurityUtils.X.checkMenu(41L)) {
//            return Result.failed("暂无权限");
//        }
//
//        DateTime date = DateUtil.date();
//
//        String startTime = DateUtil.format(DateUtil.beginOfDay(date),DatePattern.NORM_DATETIME_PATTERN);
//        String endTime = DateUtil.format(DateUtil.endOfDay(date),DatePattern.NORM_DATETIME_PATTERN);
//
//
//        Integer warnType = msgInfoPageDTO.getWarnType();
//
//        Page<WarnHistory> historyPage = warnHistoryService.lambdaQuery()
//                .eq(WarnHistory::getWarnType, warnType)
//                .le(WarnHistory::getCreateTime, endTime)
//                .ge(WarnHistory::getCreateTime, startTime)
//                .eq(WarnHistory::getBeOver, 0)
//                .page(new Page<>(1, 100, true));
//
//
//        IPage<Object> convert = historyPage.convert(it -> {
//
//            if (warnType == 1) {
//                WarnInfoMerchantDTO parse = JacksonUtils.X.parse(it.getMetaData(), WarnInfoMerchantDTO.class);
//                parse.setBeOver(it.getBeOver());
//                parse.setId(it.getId());
//                return parse;
//            }
//            WarnInfoChannelDTO parse = JacksonUtils.X.parse(it.getMetaData(), WarnInfoChannelDTO.class);
//            parse.setBeOver(it.getBeOver());
//            parse.setId(it.getId());
//            return parse;
//        });
//
//        return Result.success(convert);
//    }
//
//
//    @Operation(summary = "告警信息")
//    @PostMapping("/info")
//    public Result<Boolean> info(@RequestParam Integer warnType) {
//
//
//        if (!SecurityUtils.X.checkMenu(41L)) {
//            return Result.success(false);
//        }
//
//
//        if (Objects.isNull(warnType)) {
//            return Result.success(false);
//        }
//
//
//        DateTime cdate = DateUtil.date();
//
//
//        String startTime = DateUtil.format(DateUtil.beginOfDay(cdate), DatePattern.NORM_DATETIME_PATTERN);
//
//
//        Long count = warnHistoryService.lambdaQuery()
//                .ge(WarnHistory::getCreateTime, startTime)
//                .eq(WarnHistory::getWarnType, warnType)
//                .eq(WarnHistory::getBeOver,0)
//                .count();
//
//
//        if (Objects.isNull(count) || count == 0) {
//            return Result.success(false);
//        }
//
//        return Result.success(true);
//
//
//    }
//
//    @Operation(summary = "告警信息")
//    @PostMapping("/disposeWarn/{id}")
//    public Result<Boolean> disposeWarn(@PathVariable Long id) {
//        warnHistoryService.lambdaUpdate()
//                .eq(WarnHistory::getId, id)
//                .set(WarnHistory::getBeOver, 1)
//                .update();
//        return Result.success();
//    }
//
////    @Operation(summary = "告警信息")
////    @PostMapping("/dedee")
////    public Result<Boolean> ddd(){
////        warnHistoryService.checkByMerchant(2L);
////        return Result.success(true);
////    }
//}
